The formal definition of a derived entity and derived architecture:

derived_entity_declaration ::=
    entity identifier is new entity_name with
        derived_entity_header
        derived_entity_declarative_part
    [ begin
        derived_entity_statement_part ]
    end [ entity ] [ entity_simple_name ];
 
derived_architecture_body ::=
    architecture identifier of entity_name_#1 is
    new
[abstract] architecture_name
                [of entity_name_#2] with
       
derived_architecture_declarative_part
    begin
       
derived_architecture_statement_part
    end [architecture] [architecture_simple_name];


To ensure compatibility of architecture inheritance with entity inheritance, one of the following cases must be fulfilled:
  • entity_name_#2 is omitted. In this case it is assumed to be equal to entity_name_#1.
  • both entity names denote the same entity
  • the entity denoted by entity_name_#2 is in an ancestor of entity_name_#1.

It is an error if none of the above cases is true. Furthermore it is an error if architecture_name does not denote an architecture of entity_name_#2.

Due to the fact that a derived entity is a new primary unit, the formal definition of a primary unit needs to be extended:

primary_unit ::= entity_declaration
    | derived_entity_declaration -- new!
    | configuration_declaration
    | package_declaration